// 题意：给定长度为n(<=100000)的序列（可正可负），求连续的长度不超过k的子区间
//       和的最大值。
//
// 题解：弄出前缀和，一段子区间[l, r]的和就是sum[r]-sum[l-1]，长度不超过
//       k可以用单调队列维护，然后维护sum值递减就行。
//
// 统计：483ms, 2wa
//
// run: $exec < input
// opt: 0
// flag: -g
#include <cstdio>

struct state { int v, p; };

int const inf = 1 << 30;
int const maxn = 200100;
int da[maxn], sum[maxn];
state monoq[4 * maxn];
int n, k;

int main()
{
	int T;
	std::scanf("%d", &T);
	while (T--) {
		std::scanf("%d %d", &n, &k);
		for (int i = 1; i <= n; i++) {
			std::scanf("%d", &da[i]);
			da[i + n] = da[i];
		}
		for (int i = 1; i <= 2 * n; i++) sum[i] = sum[i - 1] + da[i];

		int ans = -inf, start, end;
		int head = 1, tail = 0;
		for (int i = 0; i <= 2 * n; i++) {
			while (head <= tail && i - monoq[head].p > k) head++;
			if (head <= tail && sum[i] - sum[monoq[head].p] > ans) {
				ans = sum[i] - sum[monoq[head].p];
				start = monoq[head].p + 1;
				end = (i - 1) % n + 1;
			}
			state tmp; tmp.v = sum[i]; tmp.p = i;
			while (head <= tail && tmp.v < monoq[tail].v) tail--;
			monoq[++tail] = tmp;
		}
		std::printf("%d %d %d\n", ans, start, end);
	}
}

